package exam.huawei.string;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.TreeSet;

/**
 * 猜字谜
 * <p>
 * 小王设计了一个简单的猜字谜游戏，游戏的迷面是一个错误的单词，比如nesw，
 * 玩家需要猜出谜底库中正确的单词。猜中的要求如下:对于某个谜面和谜底单词，
 * 满足下面任一条件都表示猜中:
 * <p>
 * 1.变换顺序以后一样的，比如通过变换w和e的顺序，“nwes”跟“news”是可以完全对应的
 * 2.字母去重以后是一样的，比如“woood”和“wood”是一样的，它们去重后都是“wod”
 * <p>
 * 请你写一个程序帮忙在谜底库中找到正确的迷底。迷面是多个单词，都需要找到对应的迷底，
 * 如果找不到的话，返回"not found"
 * <p>
 * 输入描述
 * 1.谜面单词列表，以“，”分隔
 * 2.谜底库单词列表，以”，"分隔
 */
public class Example07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] issues = sc.nextLine().split(",");
        String[] answers = sc.nextLine().split(",");

        System.out.println(getResult(issues, answers));
    }

    public static String getResult(String[] issues, String[] answers) {
        ArrayList<String> ans = new ArrayList<>();

        for (String issue : issues) {
            String str1 = getSortedAndDistinctStr(issue);
            boolean isFind = false;

            for (String answer : answers) {
                String str2 = getSortedAndDistinctStr(answer);
                if (str1.equals(str2)) {
                    ans.add(answer);
                    isFind = true;
                    // break; // 如果一个谜面对应多个谜底，这里就不能break，如果一个谜面只对应一个谜底，那这里就要break，考试的时候都试下
                }
            }

            if (!isFind) {
                ans.add("not found");
            }
        }

        StringJoiner sj = new StringJoiner(",");
        for (String an : ans) {
            sj.add(an);
        }
        return sj.toString();
    }

    public static String getSortedAndDistinctStr(String str) {
        // TreeSet中的元素是自然排序的且不重复，利用这个特性完成
        TreeSet<Character> set = new TreeSet<>();
        for (char c : str.toCharArray()) {
            set.add(c);
        }
        return set.toString();
    }
}
